//
//  EmoticonPackage.swift
//  表情键盘
//
//  Created by mac on 15/9/17.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

class EmoticonPackage: NSObject {
    ///目录名
    var id :String?
    /// 分组名
    var group_name_cn: String?
    /// 表情符号数组
    lazy var emoticons = [Emoticon]()
    
    
    init(dict:[String: AnyObject]) {
        super.init()
        // setValuesForKeysWithDictionary 会循环调用 setValueForKey 函数
        // 但是，调用的顺序程序员无法决定
        // 如果先调用 emoticons 数组，再调用 id 就无法正确拼接路径
        id = dict["id"] as? String
        
        group_name_cn = dict["group_name_cn"] as? String
        
        /// 每个‘20’个按钮添加一个删除按钮
        var index = 0
        if let array = dict["emoticons"] as? [[String : String]]{
            for var d in array
            {
                //拼接 png 的 key ，id + "/" + png ,后续再做读取图片的时候，直接使用包路径就可以
                // 判断字典中是否包含 png 的 key，排除 emoji 没有图片的情况
                if let imagePath = d["png"]{
                    d["png"] = id! + "/" + imagePath
                }
                emoticons.append(Emoticon(dict: d))
                
                index++
                //判断是否已经是20个
                if index == 20 {
                    //插入一个删除按钮
                    emoticons.append(Emoticon(isRemove: true))
                    index = 0
                }
            }
        }
        appendBlankEmoticon()
    }
    ///追加空白表情
    func appendBlankEmoticon()
    {
        let count = emoticons.count % 21
        
        print("\(group_name_cn)分组 剩余\(count) 个按钮")
        
        // 如果刚好被 21 整除直接返回
        if count == 0 && emoticons.count > 0{
            return
        }
        //如果有需要补足的情况，表情数组完全为空
        //追加到20个空白按钮
        for _ in count..<20 {
            self.emoticons.append(Emoticon(isEmpty: true))
        }
        //末尾追加一个删除按钮
        emoticons.append(Emoticon(isRemove: true))
        
    }
    
    override var description:String{
        let Keys = ["id", "group_name_cn", "emoticons"]
        
        return dictionaryWithValuesForKeys(Keys).description
    }
}
